/*
 * Copyright 2017-8-30 13:56:26 The JA-SIG Collaborative. All rights reserved.
 * distributed with thi file and available online at
 */
package com.lap.scp.admin.ao;

import org.springframework.validation.BindingResult;

import com.lap.scd.commons.page.Page;
import com.lap.scd.commons.page.PageResult;
import com.lap.scd.commons.result.Resp;
import com.lap.scd.commons.result.Result;
import com.lap.scp.admin.bean.UserBean;
import com.lap.scp.admin.domain.UserDO;
import com.lap.scp.admin.query.UserQueryDO;

/**
 * <pre>
 * 管理员应用对象
 * </pre>
 * 
 * @author 系统自动生成 Exp
 * @Date 2017-8-30 13:56:26
 * @since 1.0
 */
public interface UserAO {
	/**
	 * 根据ID删除数据信息
	 * 
	 * @param userId
	 * @return 改变数量
	 */
	Resp<Integer> deleteById(int userId);

	/**
	 * 新增
	 *
	 * @param userDO
	 * @return
	 */
	Resp<UserDO> insertUser(UserDO userDO, BindingResult error);

	/**
	 * 根据ID查询数据信息
	 *
	 * @param userId
	 * @return UserDO
	 */
	Resp<UserDO> queryById(int userId);

	/**
	 * 分页查询数据信息
	 *
	 * @param page
	 * @param queryDO
	 * @return 数据集合
	 */
	PageResult<UserDO> queryPage(Page page, UserQueryDO queryDO);

	/**
	 * 根据ID修改
	 *
	 * @param userDO
	 * @return
	 */
	Resp<Integer> updateUser(UserDO userDO, BindingResult error);

	/**
	 * 修改管理员状态，这里仅根据管理员ID 更新管理员状态，最后修改人，最后修改时间
	 * 
	 * @param userId
	 * @param status
	 * @param updatedBy
	 * @return
	 */
	Resp<Integer> updateStatus(int userId, int status, String updatedBy);

	/**
	 * 修改密码
	 * 
	 * @param userId
	 * @param oldPd
	 * @param newPd
	 * @param updatedBy
	 * @return
	 */
	Resp<Integer> updatePasswd(int userId, String oldPd, String newPd, String updatedBy);

	/**
	 * 根据用户ID查询用户基本信息，同时包括用户已经存在角色信息
	 * 
	 * @param userId
	 * @return
	 */
	Result<UserBean> queryForBind(int userId);

	/**
	 * 给管理员分配角色
	 * 
	 * @param userId
	 * @param roleIds
	 * @return
	 */
	Resp<Integer> roleBind(int userId, String roleIds);

	/**
	 * 根据管理员登录账号查询用户信息，包括查询关联的角色信息
	 * 
	 * @param username
	 * @return
	 */
	Resp<UserDO> queryByUsername(String username);

}
